クラスタリングを作ってみよう
近頃、HA( High Availability )というのを良く目にしますが、簡単に言うと止まらないシステムという事のようで、言い換えれば、ここは俺に任せてお前は先にいけ。という事で片方に何か起きても大丈夫にできている。私はたぶん3人目だと思うから。ならば冗長化されていて尚良いとでも言うのでしょうか。
てなわけで、Heartbeetを利用したクラスタリングに挑戦したいと思います。
今回の対象はHTTPDのみです。NFS、NAS、DRBDなどなど設定さえすればストレージだってHAクラスタ構成にできるようなの!まずは最初の一歩。
もうずいぶんと昔、KeepAlivedとLVSでロードバランシング というネタをやった時に出てきたKeepAlivedもこのHeartbeetの仲間だと思われますが、前回はLVSで負荷分散が目的だったので、片方が落ちたときの挙動は考えてなかったな。
今回の参考サイト
UnixLife HeartBeatによるHAクラスタの設定
ITPRO 実際に作って理解する!Linuxサーバーのクラスタリング
用意したもの
VMwareでCentOS64Bitを2台分構築 NIC2個
ホストA hb02 eth0 192.168.0.1 eth1 192.168.24.70
ホストB hb03 eth0 192.168.0.2 eth1 192.168.24.71
仮想IP 192.168.24.80
My PC | スイッチ ーーーホストA | | ーーーーーホストB
こんな感じの構成を作りました。お互いにPingで疎通が取れれば準備OK。
ハートビートのインストール
modprobe.conf に options softdog nowayout=0 を記述する。
vi modprobe.conf
options softdog nowayout=0
lm_sensors のインストール。
yum -y install lm_sensors mlocate
本体をインストール。Linux-HA Japanさんのリポジトリを利用しました。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# yum -c pacemaker.repo install heartbeat
Installed: heartbeat.x86_64 0:3.0.5-1.1.el6 Dependency Installed: OpenIPMI-libs.x86_64 0:2.0.16-14.el6 PyXML.x86_64 0:0.8.4-19.el6 cluster-glue.x86_64 0:1.0.11-1.el6 cluster-glue-libs.x86_64 0:1.0.11-1.el6 heartbeat-libs.x86_64 0:3.0.5-1.1.el6 libaio.x86_64 0:0.3.107-10.el6 libtool-ltdl.x86_64 0:2.2.6-15.5.el6 net-snmp-libs.x86_64 1:5.5-49.el6_5.3 openhpi-libs.x86_64 0:2.14.1-6.el6 perl-TimeDate.noarch 1:1.16-11.1.el6 resource-agents.x86_64 0:3.9.5-1.310.0d443.el6 Complete!
割と昔の記事だったららしく、参考サイトからバージョンはずいぶんと上がっていた。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# rpm -qa | grep heartbeat heartbeat-libs-3.0.5-1.1.el6.x86_64 heartbeat-3.0.5-1.1.el6.x86_64
chkconfigへの追加は不要で、既にchkconfigに入っていた。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig --list heartbeat heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
参考サイトを模範に進めるにょで、自動起動をOFFる。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig heartbeat off [root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig --list heartbeat heartbeat 0:off 1:off 2:off 3:off 4:off 5:off 6:off
設定その他うんぬん
rcスクリプトへ、追加処理のための2行を追加。
+++ /etc/init.d/heartbeat 2014-09-21 17:40:23.788639897 +0900 @@ -501,6 +501,7 @@ restart) sleeptime=`ha_parameter deadtime` + RunStartStop "pre-stop" StopHA if ! CrmEnabled ; then echo @@ -510,6 +511,7 @@ echo_success fi echo + RunStartStop "pre-start" StartHA echo ;;
authkeys:ハートビート認証設定ファイル。の記述。
[root@hb02 ~]# cat /etc/ha.d/authkeys | egrep -v "^#|^$" auth 1 1 sha1 takeken
ha.cf:クラスタ基本設定ファイル。
[root@hb02 ~]# cat /etc/ha.d/ha.cf | egrep -v "^#|^$" logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 bcast eth0 # Linux ucast eth0 192.168.0.2 auto_failback on node hb02 node hb03
では動かしてみよう
本番系、待機系の順に起動させるる。
[root@hb02 ~]# /etc/init.d/heartbeat start Starting High-Availability services: INFO: Resource is stopped Done.
httpdが動いて、仮想IPが振られマスタ。
[root@hb02 ~]# ifconfig eth1:0 eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5C:C4:E2 inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:16 Base address:0x2000
[root@hb02 ~]# netstat -tl | grep http tcp 0 0 *:http *:* LISTEN
待機系は待機してます。変な日本語だな。
[root@hb03 ~]# ifconfig eth1:0 eth1:0 Link encap:Ethernet HWaddr 00:0C:29:4F:89:17 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:16 Base address:0x2000 [root@hb03 ~]# netstat -tl | grep http [root@hb03 ~]# [root@hb03 ~]# service httpd status httpd は停止しています
では本番系のハートビートを停止し、本番系から待機系にフェールオーバさせます。
ドキドキ。
[root@hb02 ~]# /usr/lib64/heartbeat/heartbeat -k [root@hb02 ~]#
[root@hb03 ~]# ifconfig eth1:0 eth1:0 Link encap:Ethernet HWaddr 00:0C:29:4F:89:17 inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:16 Base address:0x2000 [root@hb03 ~]# service httpd status httpd (pid 2091) を実行中...
わ~お。記事だとこの感動は伝わらないと思いますが、見事に待機系が動いてます。
では、本番系に戻したいと思います。戻すには本番系でハートビートを起動すればいいだけとのこと。
[root@hb02 ~]# /etc/init.d/heartbeat start Starting High-Availability services: INFO: Resource is stopped Done. [root@hb02 ~]# ifconfig eth1:0 eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5C:C4:E2 inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:16 Base address:0x2000 [root@hb02 ~]# service httpd status httpd (pid 2634) を実行中...
[root@hb03 ~]# service httpd status httpd は停止しています
一瞬で入れ替わりました。
簡単な検証ならこんなに簡単にできるようだ。
このミドルウェア、ぱないの!